## 自定义限流类
from rest_framework import throttling


class CustomThrottle(throttling.BaseThrottle):

    def __init__(self, **kwargs):
        self.rate = kwargs.pop("rate", None)
        self.burst = kwargs.pop("burst", None)
        self.scope = kwargs.pop("scope", None)
        self.methods = kwargs.pop("methods", None)
        self.ip_based = kwargs.pop("ip_based", None)
        self.proxy_based = kwargs.pop("proxy_based", None)
        self.dynamic = kwargs.pop("dynamic", False)
        self.log = kwargs.pop("log", False)
        self.headers = kwargs.pop("headers", None)
        self.cache = kwargs.pop("cache", None)
        self.ident = kwargs.pop("ident", None)
        self.backend = kwargs.pop("backend", None)
        self.limit_by = kwargs.pop("limit_by", None)
        super().__init__(**kwargs)

    def allow_request(self, request, view):
        # 在这里编写你的限流逻辑
        # 返回 True 允许请求通过，返回 False 拒绝请求
        # 可以使用 request 和 view 对象来获取请求的相关信息
        # 例如，可以使用 request.user.id 来标识每个用户的请求频率
        # 示例：如果请求的 IP 地址是已知的攻击源，则拒绝请求
        if request.META["REMOTE_ADDR"] in self.blacklist:
            return False
        return True

    def get_ident(self, request):
        # 返回用于标识请求的唯一标识符，例如 IP 地址、用户认证信息等
        return request.user.id
